package model

import (
	"mt-server/basic/config"
	"time"

	"gorm.io/gorm"
)

// 商家表
type Merchant struct {
	gorm.Model
	Id      int32   `gorm:"column:id;type:int;comment:商家id;primaryKey;not null;" json:"id"`                // 商家id
	NikName string  `gorm:"column:nik_name;type:varchar(20);comment:商家门店名称;default:NULL;" json:"nik_name"` // 商家门店名称
	Rating  float64 `gorm:"column:rating;type:decimal(10, 2);comment:店铺评分;default:NULL;" json:"rating"`    // 店铺评分
	Status  int32   `gorm:"column:status;type:int;comment:商家状态 0-离线 1在线;default:NULL;" json:"status"`      // 商家状态 0-离线 1在线
}

// 商家状态查询
func (m *Merchant) FirstMerchant() error {
	return config.DB.Where("nik_name=?", m.NikName).First(&m).Error
}

// 商家门店展示
func (m *Merchant) ListMerchant(nikName string, page, pageSize int) ([]Merchant, int64, error) {
	if page <= 0 {
		page = 1
	}
	if pageSize <= 0 || pageSize >= 100 {
		pageSize = 10
	}
	var total int64
	var or []Merchant
	config.DB.Model(&Merchant{}).Where("deleted_at IS NULL").Find(&total)
	err := config.DB.
		Where("deleted_at IS NULL").
		Offset((page - 1) * pageSize).
		Limit(pageSize).
		Find(&or).
		Error
	return or, total, err
}

// 骑手
type Rider struct {
	gorm.Model
	Id         uint64 `gorm:"column:id;type:bigint UNSIGNED;comment:骑手id;primaryKey;not null;" json:"id"`  // 骑手id
	OrderTotal int32  `gorm:"column:order_total;type:int;comment:配送外卖总数;default:NULL;" json:"order_total"` // 配送外卖总数
}

// 骑手配送外卖数量查询
func (r *Rider) FindRider() error {
	return config.DB.Find(&r).Error
}

// 预约表
type Appointment struct {
	gorm.Model
	Id           int32     `gorm:"column:id;type:int;comment:预约id;primaryKey;not null;" json:"id"`                          // 预约id
	Date         time.Time `gorm:"column:date;type:datetime;comment:日期;default:NULL;" json:"date"`                          // 日期
	NumberPeople int32     `gorm:"column:number_people;type:int;comment:人数;default:NULL;" json:"number_people"`             // 人数
	Information  string    `gorm:"column:information;type:varchar(50);comment:联系人信息;default:NULL;" json:"information"`      // 联系人信息
	Status       string    `gorm:"column:status;type:varchar(20);comment:预约状态 0-已取消 1-已核销;default:NULL;" json:"status"`     // 预约状态 0-已取消 1-已核销
	Reminder     string    `gorm:"column:reminder;type:varchar(20);comment:预约提醒 0-未提醒 1-已提醒;default:NULL;" json:"reminder"` // 预约提醒 0-未提醒 1-已提醒
}

// 消费者预约
func (a *Appointment) AppointmentC() error {
	return config.DB.Create(a).Error
}

// 商家预约管理
func (a *Appointment) MerchantAppointmentC() error {
	return config.DB.Where("id=?", a.Id).Updates(a).Error
}

// 预约列表
func (a *Appointment) ListAppointment(page, pageSize int) ([]Appointment, int64, error) {
	if page <= 0 {
		page = 1
	}
	if pageSize <= 0 || pageSize >= 100 {
		pageSize = 10
	}
	var total int64
	var or []Appointment
	config.DB.Model(&Appointment{}).Where("deleted_at IS NULL").Find(&total)
	err := config.DB.
		Where("deleted_at IS NULL").
		Offset((page - 1) * pageSize).
		Limit(pageSize).
		Find(&or).
		Error
	return or, total, err
}

// 评价表
type Evaluate struct {
	gorm.Model
	Id         int32  `gorm:"column:id;type:int;comment:评价id;primaryKey;not null;" json:"id"`              // 评价id
	UserId     int32  `gorm:"column:user_id;type:int;comment:用户id;default:NULL;" json:"user_id"`           // 用户id
	Evaluate   string `gorm:"column:evaluate;type:varchar(50);comment:用户评价;default:NULL;" json:"evaluate"` // 用户评价
	GoodsId    int32  `gorm:"column:goods_id;type:int;comment:商品id;default:NULL;" json:"goods_id"`         // 商品id
	MerchantId int32  `gorm:"column:merchant_id;type:int;comment:店铺id;default:NULL;" json:"merchant_id"`   // 店铺id
}

// 门店评价
func (e *Evaluate) EvaluateC() error {
	return config.DB.Create(e).Error
}

// 评价管理
func (e *Evaluate) MerchantEvaluate() error {
	return config.DB.Where("merchant_id = ?", e.MerchantId).First(e).Error
}

// 菜单表
type Goods struct {
	gorm.Model
	Id        int32   `gorm:"column:id;type:int;comment:商品id;primaryKey;not null;" json:"id"`           // 商品id
	Name      string  `gorm:"column:name;type:varchar(20);comment:商品名称;default:NULL;" json:"name"`      // 商品名称
	Img       string  `gorm:"column:img;type:varchar(100);comment:商品样式;default:NULL;" json:"img"`       // 商品样式
	Price     float64 `gorm:"column:price;type:decimal(10, 2);comment:商品价格;default:NULL;" json:"price"` // 商品价格
	Inventory int32   `gorm:"column:inventory;type:int;comment:商品库存;default:NULL;" json:"inventory"`    // 商品库存
	Sales     int32   `gorm:"column:sales;type:int;comment:商品销量;default:NULL;" json:"sales"`            // 商品销量
}

// 菜单查询
func (g *Goods) FindGoods() error {
	return config.DB.Find(&g).Error
}

func (g *Goods) UpGoods() error {
	return config.DB.Updates(g.Inventory - 1).Error
}

// 菜单优选展示
func (g *Goods) ListGoods(page, pageSize int) ([]Goods, int64, error) {
	if page <= 0 {
		page = 1
	}
	if pageSize <= 0 || pageSize >= 100 {
		pageSize = 10
	}
	var total int64
	var or []Goods
	config.DB.Model(&Goods{}).Where("deleted_at IS NULL").Find(&total)
	err := config.DB.
		Where("deleted_at IS NULL").
		Order("sales desc"). //按照销量排序
		Offset((page - 1) * pageSize).
		Limit(pageSize).
		Find(&or).
		Error
	return or, total, err
}
